//package com.example.seed.fliter;
//
//import com.example.seed.entity.DataScopeEntityProps;
//import com.example.seed.entity.SysRole;
//import com.example.seed.entity.SysUser;
//import com.example.seed.enums.DataScope;
//import com.example.seed.service.SysDeptRepository;
//import com.example.seed.utils.SpringSecurityUtil;
//import jakarta.annotation.Resource;
//import org.babyfish.jimmer.sql.filter.Filter;
//import org.babyfish.jimmer.sql.filter.FilterArgs;
//import org.springframework.stereotype.Component;
//
//import java.util.Collection;
//import java.util.List;
//
//
///**
// * 数据权限过滤器
// *
// * @author AAA
// * @date 2024/02/26
// */
//@Component
//public class DataScopeFilter implements Filter<DataScopeEntityProps> {
//
//    private static final org.slf4j.Logger log
//            = org.slf4j.LoggerFactory.getLogger(DataScopeFilter.class);
//
//    @Resource
//    private SysDeptRepository deptRepository;
//
//    @Override
//    public void filter(FilterArgs<DataScopeEntityProps> args) {
//
//        log.info("DataScopeFilter");
//
//        DataScopeEntityProps table = args.getTable();
//        //当前系统登陆用户
//        SysUser sysUser = SpringSecurityUtil.getLoginUser().getSysUser();
//        //获得当前用户的所有角色
//        List<SysRole> sysRoles = sysUser.sysRoles();
//        if (sysRoles.isEmpty()) {
//            return;
//        }
//        for (SysRole sysRole : sysRoles) {
//            DataScope dataScope = sysRole.dataScope();
//            switch (dataScope) {
//                case ALL:
//                    break;
//                case DEPARTMENT:
//                    args.where(table.creatorDept().eq(sysUser.dept()));
//                    break;
//                case DEPARTMENT_AND_BELOW:
//                    //当前用户所在部门和子部门
//                    Collection<Long> deptIds = deptRepository.findChildNodeIdsByParentId(sysUser.dept().id());
//                    args.where(table.creatorDeptId().inIf(deptIds));
//                    break;
//                case SELF:
//                    args.where(table.creatorId().eq(sysUser.id()));
//                case CUSTOM:
//                    //if (!sysRole.customDeptIds().isEmpty()) {
//                    //    args.where(args.getTable().deptId().in(sysRole.customDeptIds()));
//                    //}
//                    break;
//                default:
//                    args.where(table.creatorDeptId().eq(0L));
//                    args.where(table.creatorId().eq(0L));
//                    break;
//            }
//        }
//    }
//
//    //@Override
//    //public SortedMap<String, Object> getParameters() {
//    //    SysUser sysUser = sysUserRepository.currentLoginUser();
//    //    if (sysUser == null) {
//    //        return null;
//    //    }
//    //    SortedMap<String, Object> map = new TreeMap<>();
//    //    map.put("user", sysUser.id());
//    //    map.put("dept", sysUser.dept().id());
//    //    return map;
//    //}
//    //
//    //@Override
//    //public boolean isAffectedBy(EntityEvent<?> e) {
//    //    return e.isChanged(DataScopeEntityProps.CREATOR) && e.isChanged(DataScopeEntityProps.CREATOR_DEPT);
//    //}
//}
